Django এ Middleware একটি কম্পোনেন্ট যা HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যে মধ্যস্থতাকারী হিসেবে কাজ করে। এটি ডেটা প্রক্রিয়াকরণের সময় বিভিন্ন কাজ করতে পারে যেমন: রিকোয়েস্ট লগিং, সেশন হ্যান্ডলিং, ইউজার অথেনটিকেশন, ইত্যাদি। Django তে আপনি Custom Middleware তৈরি করতে পারেন, যা আপনার প্রয়োজন অনুযায়ী রিকোয়েস্ট এবং রেসপন্সের উপর কাস্টম প্রক্রিয়াকরণ করতে সাহায্য করে।
এখানে, আমরা Django তে Custom Middleware তৈরি এবং ব্যবহারের নিয়ম আলোচনা করবো।
Middleware কী?
Middleware হলো একটি ক্লাস বা ফাংশন যা Django তে HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যবর্তী পর্যায়ে কাজ করে। এটি রিকোয়েস্ট বা রেসপন্সে কিছু পরিবর্তন করতে পারে, যেমন:
- রিকোয়েস্ট প্রসেস করার আগে
- রেসপন্স প্রেরণ করার আগে
- রিকোয়েস্ট বা রেসপন্সে কাস্টম প্রসেসিং
Custom Middleware তৈরি করার ধাপ
১. Middleware ক্লাস তৈরি করা
Django তে Custom Middleware তৈরি করতে হলে, আপনাকে একটি ক্লাস তৈরি করতে হবে যা __init__ এবং __call__ মেথডগুলি অন্তর্ভুক্ত করবে অথবা process_request এবং process_response মেথডগুলিকে ওভাররাইড করবে।
Django 1.10 থেকে, Middleware এর জন্য নতুন স্টাইলের ক্লাস ব্যবহার করা হয়, যেখানে ক্লাসটি __call__ মেথড বা process_request ও process_response মেথড ব্যবহার করে কাজ করে।
উদাহরণ:
একটি কাস্টম Middleware তৈরি করি যা প্রতিটি রিকোয়েস্টের লগিং করবে:
import logging
class SimpleLoggingMiddleware:
def __init__(self, get_response):
# Middleware এর ইনস্ট্যান্স তৈরি হবে যখন এটি প্রথম রিকোয়েস্ট গ্রহণ করবে।
self.get_response = get_response
self.logger = logging.getLogger('django')
def __call__(self, request):
# প্রতিটি রিকোয়েস্টের আগে এই অংশটি রান হবে
self.logger.info(f'Processing request: {request.path}')
# মূল রিকোয়েস্ট প্রক্রিয়াকরণ (এটি পরবর্তী Middleware বা ভিউ ফাংশনে যাবে)
response = self.get_response(request)
# রেসপন্স প্রেরণের আগে
self.logger.info(f'Response status: {response.status_code}')
return response
এখানে, SimpleLoggingMiddleware ক্লাসটি request এর path লগ করে এবং রেসপন্সের status_code লগ করে।
২. Middleware-এ process_request এবং process_response ব্যবহার
Django এর পুরনো ভার্সনে, Middleware-এ process_request এবং process_response মেথড ছিল, যা আপনি অতিরিক্ত কাজ করার জন্য ব্যবহার করতে পারেন।
উদাহরণ:
class CustomMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def process_request(self, request):
# রিকোয়েস্ট প্রসেস করার আগে এই অংশটি রান হবে
print(f"Processing request for {request.path}")
def process_response(self, request, response):
# রেসপন্স প্রেরণের আগে এই অংশটি রান হবে
print(f"Sending response with status {response.status_code}")
return response
process_request(self, request): রিকোয়েস্ট প্রক্রিয়াকরণের আগে কল হয়।process_response(self, request, response): রেসপন্স প্রেরণের আগে কল হয়।
৩. Middleware এর কাজের স্ট্রাকচার
Custom Middleware এর কাজের স্ট্রাকচার সাধারণত এইরকম হয়:
- রিকোয়েস্ট প্রসেসিং:
process_requestমেথডে। - রেসপন্স প্রসেসিং:
process_responseমেথডে।
Django তে Custom Middleware ব্যবহার করা
১. settings.py ফাইলে Middleware যুক্ত করা
একটি Custom Middleware তৈরি করার পর, আপনাকে Django এর settings.py ফাইলে এটি যুক্ত করতে হবে। MIDDLEWARE লিস্টে আপনার কাস্টম Middleware ক্লাসটি অন্তর্ভুক্ত করুন।
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# আপনার কাস্টম Middleware যোগ করুন
'myapp.middleware.SimpleLoggingMiddleware',
]
এখানে myapp.middleware.SimpleLoggingMiddleware হল আমাদের তৈরি করা কাস্টম Middleware।
২. Middleware এর অর্ডার
Middleware একাধিক হতে পারে এবং এগুলোর কাজের অর্ডার গুরুত্বপূর্ণ। Django Middleware রিকোয়েস্ট প্রক্রিয়াকরণের সময় উপর থেকে নিচে চলে এবং রেসপন্স প্রেরণের সময় নিচ থেকে উপরে ফিরে আসে। এর মানে হলো, প্রথম Middleware প্রথমে কাজ করবে এবং শেষ Middleware শেষের দিকে কাজ করবে।
Django তে Middleware ব্যবহারের কিছু সাধারণ প্রয়োগ
- রিকোয়েস্ট লগিং: যেভাবে উপরের উদাহরণে রিকোয়েস্ট এবং রেসপন্সের লগিং করা হয়েছে।
- ইউজার অথেনটিকেশন: কাস্টম Middleware এর মাধ্যমে ইউজারের সেশন এবং লগইন স্টেট চেক করা।
- রিকোয়েস্ট প্রিপ্রসেসিং: বিভিন্ন ফর্ম্যাটে ইনপুট ভ্যালিডেশন বা পরিবর্তন করা।
- রেসপন্স পরিমার্জন: রেসপন্স পাঠানোর আগে এর কিছু অংশ পরিবর্তন বা সেট করা।
নিরাপত্তা এবং Middleware
Middleware নিরাপত্তা ব্যবস্থার জন্যও ব্যবহৃত হতে পারে, যেমন:
- CSRF (Cross-Site Request Forgery): Django তে CSRF আক্রমণ প্রতিরোধের জন্য built-in Middleware ব্যবহার করা হয়।
- Authentication: Middleware ব্যবহার করে ইউজারের অথেনটিকেশন চেক করা যায়, যেমন কাস্টম অথেনটিকেশন মেথড ব্যবহার করা।
সারাংশ
Django তে Custom Middleware তৈরি করা খুবই সহজ এবং এটি আপনার অ্যাপ্লিকেশনের প্রক্রিয়ায় অনেক সুবিধা এনে দেয়। Middleware ব্যবহার করে আপনি রিকোয়েস্ট এবং রেসপন্সে বিভিন্ন কাস্টম প্রসেসিং যুক্ত করতে পারেন, যেমন লগিং, অথেনটিকেশন, রিকোয়েস্ট ফিল্টারিং, এবং আরও অনেক কিছু। Django তে Middleware ব্যবহার করার সময়, সঠিক অর্ডারে এটিকে settings.py ফাইলে অন্তর্ভুক্ত করা গুরুত্বপূর্ণ।
Read more